01.Docker 入门

Docker 入门

Docker 介绍

Docker 和虚拟机区别?

image.png

虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。Docker 是不携带操作系统的,所以 Docker 的应用就非常的轻巧。另外在调用宿主机的 CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用 Hypervisor 去虚拟化内存,整个调用过程是虚拟内存 ->虚拟物理内存 ->真正物理内存,但是 Docker 是利用 Docker Engine 去调用宿主的的资源,这时候过程是虚拟内存 ->真正物理内存。

传统虚拟机 Docker 容器
磁盘占用 几个 GB 到几十个 GB 左右 几十 MB 到几百 MB 左右
CPU 内存占用 虚拟操作系统非常占用 CPU 和内存 Docker 引擎占用极低
启动速度 (从开机到运行项目)几分钟 (从开启容器到运行项目)几秒
安装管理 需要专门的运维技术 安装、管理方便
应用部署 每次部署都费时费力 从第二次部署开始轻松简捷
耦合性 多个应用服务安装到一起,容易互相影响 每个应用服务一个容器,达成隔离
系统依赖 需求相同或相似的内核,目前推荐是 Linux

Docker 应用场景


Docker 核心架构

Docker 架构图

image.png|800

概念 说明
Docker 镜像 (Images) Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器 (Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端 (Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机 (Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine 是一个简化 Docker 安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装 Docker,比如 VirtualBox、 Digital Ocean、Microsoft Azure。

Docker 原理

C-S 架构,容器之间互相隔离,通过 Socket 进行通信。

Docker 快于 VM 的原理

Docker 镜像、容器和仓库

容器是由镜像实例化而来。简单来说,镜像是文件,容器是进程。容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。

docker 的镜像概念类似虚拟机的镜像。是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

docker 利用容器来运行应用:docker 容器是由 docker 镜像创建的运行实例。

docker 容器类似虚拟机,可以执行包含启动,停止,删除等。每个容器间是相互隔离的。容器中会运行特定的运用,包含特定应用的代码及所需的依赖文件。可以把容器看作一个简易版的 linux 环境(包含 root 用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。

在 Docker 的生命周期中,最核心的两个部分,一个是镜像 Images,一个是容器 Containers。 镜像运行起来就是容器。

容器服务运行的过程中,基于原始镜像做了改变,比如安装了程序,添加了文件,也可以提交回去 (commit) 成为镜像。

例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 mysql 或用户需要的其他应用程序。

docker 镜像实际上是由一层一层的系统文件组成,这种层级的文件系统被称为UnionFS( Union file system 统一文件系统),镜像可以基于 dockerfile 构建,dockerfile 是一个描述文件,里面包含了若干条命令,每条命令都会对基础文件系统创建新的层次结构。

docker 提供了一个很简单的机制来创建镜像或更新现有的镜像。用户甚至可以从其他人那里下载一个已经做好的镜像直接使用。(镜像是只读的,可以理解为静态文件)

相对于镜像来说容器是动态的,容器在启动的时候创建了一层可写层次作为最上层。

 docker create <image -id > :为指定的镜像添加一个可读写层,构成一个新的容器;

docker 仓库: 如果使用了 git 和 github 就很容易理解 docker 的仓库概念。docker 仓库概念和 git 类似。
docker 仓库是用来包含镜像的位置,docker 提供了一个注册服务器(register)来保存多个仓库,每个仓库又可以包含多个具备不同 tag 的镜像,
docker 运作中使用的默认仓库是 docker hub 公共仓库。仓库支持的操作类似 git,当用户创建了自己的镜像之后就可以使用 push 命令将它上传到共有或者私有的仓库。这样下次再另外一台机器上使用这个镜像的时候只需要从仓库里面 pull 下来就可以了。

Docker 安装

https://docs.docker.com/get-docker/

Linux

# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都输入 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v

Mac

Windows

https://docs.docker.com/desktop/install/windows-install/

镜像加速源

设置镜像

设置镜像步骤

  1. 登录阿里云服务器,找到 容器镜像服务
  2. 设置 Registry 登录密码
  3. 找到镜像加速器
  4. 配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://pi9dpp60.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

国内镜像:

镜像加速器 镜像加速器地址
Docker 中国官方镜像 https://registry.docker-cn.com
DaoCloud 镜像站 http://f1361db2.m.daocloud.io
Azure 中国镜像 https://dockerhub.azk8s.cn
科大镜像站 https://docker.mirrors.ustc.edu.cn
阿里云 https://ud6340vz.mirror.aliyuncs.com
七牛云 https://reg-mirror.qiniu.com
网易云 https://hub-mirror.c.163.com
腾讯云 轻量应用服务器 安装 Docker 并配置镜像加速源-实践教程-文档中心-腾讯云

设置 Docker 镜像命令:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json
{
  "registry-mirrors": ["加速地址"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker Desktop 设置镜像

常见的国内源有:

Docker 国内镜像源:https://registry.docker-cn.com

中科大源:https://docker.mirrors.ustc.edu.cn

网易源:https://hub-mirror.c.163.com

百度源:https://mirror.baidubce.com

腾讯源:https://ccr.ccs.tencentyun.com

阿里源:需要登陆 cr.console.aliyun.com 创建单独的镜像源链接,

|900

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
        "https://registry.docker-cn.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
   ]
}

使用如下命令查看 Docker 配置,如下图所示镜像源配置成功:

|600

Docker 镜像

Docker 命令

Dockerfile

网络配置

端口映射

容器内的网络服务和外部机器不能直接通信;外部机器和宿主机可以直接通信;宿主机和容器可以直接通信。

当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的端口,从而间接访问容器的服务。

这种操作称为:端口映射

Docker Compose

Docker Compose

Ref